package com.wujilee.wujileenetty.demos.web.netty.heima.decode;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;

/**
 * 解决黏包和半包问题
 */
public class Test {
    public static void main(String[] args) {
        // 每次发送的最大长度1024  数据从0开始  前四个字节来记录实际数据的长度， 0 表示前四个字节之后 跳过0个字节才是实际数据。4表示最后解析书来的数据 跳过前四个字节
        EmbeddedChannel embeddedChannel = new EmbeddedChannel(
                new LengthFieldBasedFrameDecoder(1024, 0, 4, 2, 6),
                new LoggingHandler(LogLevel.DEBUG));
        ByteBuf buffer = null;
        String msg = " 16Hello World!wujilee demo hello";
        int length = msg.getBytes().length;

        // int 类型占四个自己 这里表示msg的长度
        buffer.writeInt(length);
        buffer.writeBytes("12".getBytes());
        // 实际的数据
        buffer.writeBytes(msg.getBytes());
        embeddedChannel.writeInbound(buffer);
    }
}
